import router from '@/router'
import { userLoginUserStore } from '@/stores/userLoginUserStore.ts'
import { message } from 'ant-design-vue'

// 是否为首次获取登录用户
let firstFetchLoginUser = true

/**
 * 全局权限校验，每次切换时都会执行
 */
router.beforeEach(async (to, from, next) => {
  const loginUserStore = userLoginUserStore()
  let loginUser = loginUserStore.loginUser
  // 确保页面刷新、首次加载时，能等待后端返回用户信息后再进行权限校验
  if (firstFetchLoginUser) {
    await loginUserStore.fetchLoginUser();
    loginUser = loginUserStore.loginUser
    firstFetchLoginUser = false
  }
  const toUrl = to.fullPath;
  // 自定义权限校验，比如访问的路径是否带有admin字符串，若有，则与用户携带的角色权限进行比较判断
  // 管理员才能访问带有 /admin 的页面
  if (toUrl.startsWith('/admin')) {
    if (!loginUser || loginUser.userRole !== 'admin') {
      message.error('没有权限')
      next(`/user/login?redirect=${to.fullPath}`)
      return
    }
  }
  next()
})
